package cl.zeke.cursos.jsf2spring3jpa2.vista.managedbeans;

import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Usuario;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.services.UsuarioService;
import cl.zeke.java.commons.jsf2.Jsf2Util;
import java.io.Serializable;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("session")
public class IdentidadBean implements Serializable{
    
    @Autowired
    private UsuarioService usuarioService;
    
    private Integer rutPersona;
    private String nombrePersona;
    
    public Integer getRutPersona() {
        if(rutPersona == null) {
            verificarIdentidad();
        }
        return rutPersona;
    }
    
    public String getNombrePersona() {
        if(nombrePersona == null) {
            verificarIdentidad();
        }
        return nombrePersona;
    }
    
    public boolean isLoggedIn() {
        if(rutPersona == null) {
            verificarIdentidad();
            return false;
        }
        else {
            return true;
        }
    }
    
    public boolean tieneRol(String rol) {
        HttpServletRequest httpRequest = (HttpServletRequest) Jsf2Util.obtenerHttpServletRequest();
        return httpRequest.isUserInRole(rol);
    }

    private void verificarIdentidad() {
         HttpServletRequest httpRequest = (HttpServletRequest) Jsf2Util.obtenerHttpServletRequest();
         
         if(httpRequest.getUserPrincipal() == null){
             return;
         }
         
         String principalName = httpRequest.getUserPrincipal().getName();
         if(principalName == null) {
             return;
         }
         
         Usuario usuario = usuarioService.traerPorRut(principalName);
         if(usuario == null){
             return ;
         }
         
         rutPersona = usuario.getRut();
         nombrePersona = usuario.getNombreCompleto();
    }
}
